// 引入vue使用Vuex
import Vue from 'vue'
// 引入vuex
import Vuex from 'vuex'
// vuex初始化存储插件
// 默认使用localStorage来固化数据
import createPersistedState from 'vuex-persistedstate'

Vue.use(Vuex)

/*
动态加载vuex中所有的modules模块
不再需要通过import手动一个一个引入
配合webpack中require.context方法
(是否查找子目录) false
*/
const context = require.context('./modules', false, /\.js$/)
//  c 是文件路径  modules是模块名
const modules = context.keys().reduce((p, c) => {
    // 使用正则从文件路径里替换(去除其他的符号)为模块名
    // $1是正则里的捕获，就bai是前du面的(.*)里的东西
    // \w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。$是结尾
    // c.split('/')[1].replace('.js','')也可以用这个
    const moduleName = c.replace(/^\.\/(.*)\.\w+$/, '$1')
    // 获取导出的数据
    p[moduleName] = context(c).default
    return p
}, {})
// 创建store对象
export default new Vuex.Store({
    modules,
    state: {
        // 用于控制是否发送搜索请求
        songList: true
    },
    mutations: {
        UPD_SONG_list(state, mark) {
            state.songList = mark
        }
    },
    // 存储到sessionStorage里
    plugins: [createPersistedState({
        storage: window.sessionStorage,
        reducer(val) {
            // 存储指定的
            return {
                userInfo: val.login.userInfo
            }
        }
    })]
})


